//
// Created by 原帅 on 2022/10/9.
//

#ifndef R_REEPROCIF_H
#define R_REEPROCIF_H

typedef enum {
    FD_START,
    FD_ERROR,
    READ_FD,
    WRITE_FD,
    TIMER_FD,
    FD_END,
} ReeProcType;

class ReeProcIF {

public:
    /**
     * kqueue 或者 epoll 触发事件时，该接口会被调用，用户需要实现该接口
     * @param fd 触发事件的文件描述符
     * @param exdata 触发事件的数据, 当数据是-1 是代表该参数无效,IO 事件中，通常代表是IO缓冲区的大小
     * @return 用户可以自定义该值，但是Ree模块不会处理用户返回的值
     */
    virtual int eventProcess(const int fd,const ReeProcType type,const int exdata = -1) = 0;

    /**
     * kqueue 或者epoll 触发事件时发生了错误，会调用该接口，用户需要自己定义处理该错的相关动作
     * @param fd 触发事件的文件描述符
     * @param exdata 触发事件的错误数据
     * @return 用户可以自定义该值，但是Ree模块不会处理用户返回的值
     */
    virtual int eventFail(const int fd,const ReeProcType type,const int exdata) = 0;
};


#endif //R_REEPROCIF_H
